package br.com.usapre.faces;

import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import br.com.exception.SenhaException;
import br.com.login.business.SenhaBusiness;
import br.com.utilidades.faces.SimpleMessageBean;
import constantes.CONSTANTES;

/**
 * @version 1.0.0
 * @since November,21 2013
 * @author Eduardo Francisco Barbosa
 */
@Component
@Scope("view")
public class EsqueceuSuaSenhaBean extends SimpleMessageBean implements Serializable {

    private static final long serialVersionUID = -2822455685984392601L;

    private String selectItemEscolhido;
    private List<SelectItem> opcoes;

    private String tipoPessoaEscolhido;
    private List<SelectItem> opcoesTipoPessoa;

    private Boolean mostrarEsqueciUsuario;
    private Boolean mostrarEsqueciSenha;

    private Boolean mostrarPessoaFisica;
    private Boolean mostrarPessoaJuridica;

    private Boolean senhaEnviada;

    private String email;
    private String cpf;
    private String cnpj;

    private SenhaBusiness senhaBusinessImpl;

    /**
     * Contrutor
     */
    @Autowired
    public EsqueceuSuaSenhaBean(SenhaBusiness senhaBusinessImpl) {

	this.senhaBusinessImpl = senhaBusinessImpl;

	reset();
    }

    /**
     * reset
     */
    public void reset() {

	opcoes = new ArrayList<SelectItem>();
	opcoes.add(new SelectItem("1", "Esqueci minha senha"));
	opcoes.add(new SelectItem("2", "Esqueci meu usuario"));

	selectItemEscolhido = "";

	opcoesTipoPessoa = new ArrayList<SelectItem>();
	opcoesTipoPessoa.add(new SelectItem("1", "Pessoa Física"));
	opcoesTipoPessoa.add(new SelectItem("2", "Pessoa Jurídica"));

	tipoPessoaEscolhido = "1";

	senhaEnviada = Boolean.FALSE;

	mostrarEsqueciUsuario = Boolean.FALSE;
	mostrarEsqueciSenha = Boolean.FALSE;
	mostrarPessoaFisica = Boolean.TRUE;
	mostrarPessoaJuridica = Boolean.FALSE;

    }

    /**
     * atualizaCampos
     */
    public void atualizaCampos() {
	mostrarEsqueciUsuario = Boolean.FALSE;
	mostrarEsqueciSenha = Boolean.FALSE;

	if (selectItemEscolhido.equals("1")) {
	    mostrarEsqueciSenha = Boolean.TRUE;
	}
	if (selectItemEscolhido.equals("2")) {
	    mostrarEsqueciUsuario = Boolean.TRUE;
	}
    }

    /**
     * atualizaCamposTipoPessoa
     */
    public void atualizaCamposTipoPessoa() {
	mostrarPessoaFisica = Boolean.FALSE;
	mostrarPessoaJuridica = Boolean.FALSE;

	if (tipoPessoaEscolhido.equals("1")) {
	    mostrarPessoaFisica = Boolean.TRUE;
	}
	if (tipoPessoaEscolhido.equals("2")) {
	    mostrarPessoaJuridica = Boolean.TRUE;
	}
    }

    public void abrirTelaLogin() {
	try {
	    FacesContext.getCurrentInstance().getExternalContext()
		    .redirect("/" + CONSTANTES.URLUSAPRE + "/telainicial.jsf");
	} catch (IOException e) {
	    e.getStackTrace();
	}
    }

    /**
     * esqueciMinhaSenha
     */
    public void esqueciMinhaSenha() {
	try {
	    senhaBusinessImpl.ReenviarSenha(email, mostrarPessoaFisica ? cpf : cnpj);

	    String msg = super.getMensagem("MN_senha_enviada_email");
	    enviaMensagem(msg, msg);

	    senhaEnviada = Boolean.TRUE;

	} catch (SenhaException e) {
	    String msg = e.getMessage();
	    enviaMensagem(msg, msg);

	    senhaEnviada = Boolean.FALSE;
	}
    }

    /**
     * esqueciMeuUsuario
     */
    public void esqueciMeuUsuario() {
	try {
	    senhaBusinessImpl.ReenviarUsuario(email, mostrarPessoaFisica ? cpf : cnpj);

	    String msg = super.getMensagem("MN_usuario_enviada_email");
	    enviaMensagem(msg, msg);

	    senhaEnviada = Boolean.TRUE;
	} catch (SenhaException e) {
	    String msg = e.getMessage();
	    enviaMensagem(msg, msg);

	    senhaEnviada = Boolean.FALSE;
	}
    }

    // SETS AND GETS
    public String getSelectItemEscolhido() {
	return selectItemEscolhido;
    }

    public void setSelectItemEscolhido(String selectItemEscolhido) {
	this.selectItemEscolhido = selectItemEscolhido;
    }

    public List<SelectItem> getOpcoes() {
	return opcoes;
    }

    public void setOpcoes(List<SelectItem> opcoes) {
	this.opcoes = opcoes;
    }

    public Boolean getMostrarEsqueciUsuario() {
	return mostrarEsqueciUsuario;
    }

    public void setMostrarEsqueciUsuario(Boolean mostrarEsqueciUsuario) {
	this.mostrarEsqueciUsuario = mostrarEsqueciUsuario;
    }

    public Boolean getMostrarEsqueciSenha() {
	return mostrarEsqueciSenha;
    }

    public void setMostrarEsqueciSenha(Boolean mostrarEsqueciSenha) {
	this.mostrarEsqueciSenha = mostrarEsqueciSenha;
    }

    public String getEmail() {
	return email;
    }

    public void setEmail(String email) {
	this.email = email;
    }

    public String getTipoPessoaEscolhido() {
	return tipoPessoaEscolhido;
    }

    public void setTipoPessoaEscolhido(String tipoPessoaEscolhido) {
	this.tipoPessoaEscolhido = tipoPessoaEscolhido;
    }

    public List<SelectItem> getOpcoesTipoPessoa() {
	return opcoesTipoPessoa;
    }

    public void setOpcoesTipoPessoa(List<SelectItem> opcoesTipoPessoa) {
	this.opcoesTipoPessoa = opcoesTipoPessoa;
    }

    public Boolean getMostrarPessoaFisica() {
	return mostrarPessoaFisica;
    }

    public void setMostrarPessoaFisica(Boolean mostrarPessoaFisica) {
	this.mostrarPessoaFisica = mostrarPessoaFisica;
    }

    public Boolean getMostrarPessoaJuridica() {
	return mostrarPessoaJuridica;
    }

    public void setMostrarPessoaJuridica(Boolean mostrarPessoaJuridica) {
	this.mostrarPessoaJuridica = mostrarPessoaJuridica;
    }

    public String getCpf() {
	return cpf;
    }

    public void setCpf(String cpf) {
	this.cpf = cpf;
    }

    public String getCnpj() {
	return cnpj;
    }

    public void setCnpj(String cnpj) {
	this.cnpj = cnpj;
    }

    public Boolean getSenhaEnviada() {
	return senhaEnviada;
    }

    public void setSenhaEnviada(Boolean senhaEnviada) {
	this.senhaEnviada = senhaEnviada;
    }

}
